home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_03_06
/
3n06059a
< prev
next >
Wrap
Text File
|
1992-04-07
|
1KB
|
30 lines
#include <dos.h>
/* Copy bytes from NEAR buffer to HUGE array - using FAR pointers */
/* Split up copy operation where it crosses segment boundary */
void hmemcopy(char huge *to, char *from, unsigned long count) {
unsigned int offset, k, n;
char huge *toend;
char far *d;
char *s;
toend = to + count - 1; /* last byte destination */
while (FP_SEG(to) != FP_SEG(toend)){ /* will it cross boundary ? */
offset = FP_OFF(to); /* calculate how much left in segment */
if (offset == 0) { /* special case - do in two pieces */
n = 32768; /* copy first half */
d = to; s = from;
for (k = 0; k < n; k++) *d++ = *s++;
to += n; from += n; count -= n; offset += n;
}
n = 65535U - (offset - 1); /* avoid arithmetic problems */
d = to; s = from; /* copy up to end of segment */
for (k = 0; k < n; k++) *d++ = *s++;
to += n; from += n; count -= n;
}
d = to; s = from; n = (unsigned int) count; /* now do last piece */
for (k = 0; k < n; k++) *d++ = *s++;
}